package com.kangda.parttitionstorage.part;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;

import androidx.annotation.RequiresApi;

/**
 * @Author Kang da
 * @Date 2021/11/30 5:41 下午
 * 代理ContentValues、insertUri、resolver
 * 用来创建对应的insertUri、释放对应ContentValues，对应resolver更新等操作
 */
@RequiresApi(api = Build.VERSION_CODES.Q)
public class ContentHelper {
    public ContentResolver resolver;
    public ContentValues values;
    //    public Uri externalContentUri;//外部文件目录的uri
    public Uri insertUri;//文件对应的uri

    public ContentHelper(Context appContext, String fileName, String mimeType) throws Exception {
        resolver = appContext.getContentResolver();
        values = getContentValues(mimeType, fileName);
        insertUri = resolver.insert(getExternalContentUri(mimeType), values);
    }

    public ContentValues getContentValues(String mimeType, String fileName) {
        ContentValues values = new ContentValues();
        if (mimeType.contains("image/")) {
            //设置文件名
            values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
            //设置文件描述，这里以文件名为例子
            values.put(MediaStore.Images.Media.DESCRIPTION, fileName);
            //设置文件类型
            values.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
            //注意RELATIVE_PATH需要targetVersion=29
            //故该方法只可在Android10的手机上执行
            values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/" + PartStaticFinalUtil.DEFAULT_PATH);
            return values;
        } else if (mimeType.contains("video/")) {
            //设置文件名
            values.put(MediaStore.Video.Media.DISPLAY_NAME, fileName);
            //设置文件描述，这里以文件名为例子
            values.put(MediaStore.Video.Media.DESCRIPTION, fileName);
            //设置文件类型
            values.put(MediaStore.Video.Media.MIME_TYPE, mimeType);
            //注意RELATIVE_PATH需要targetVersion=29
            //故该方法只可在Android10的手机上执行
            values.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/" + PartStaticFinalUtil.DEFAULT_PATH);
            return values;
        } else if (mimeType.contains("audio/")) {
            //设置文件名
            values.put(MediaStore.Audio.Media.DISPLAY_NAME, fileName);
            //设置文件类型
            values.put(MediaStore.Audio.Media.MIME_TYPE, mimeType);
            //注意RELATIVE_PATH需要targetVersion=29
            //故该方法只可在Android10的手机上执行
            values.put(MediaStore.Audio.Media.RELATIVE_PATH, Environment.DIRECTORY_MUSIC + "/" + PartStaticFinalUtil.DEFAULT_PATH);
            return values;
        } else {
            //设置文件名
            values.put(MediaStore.Downloads.DISPLAY_NAME, fileName);
            //设置文件类型
            values.put(MediaStore.Downloads.MIME_TYPE, mimeType);
            //注意RELATIVE_PATH需要targetVersion=29
            //故该方法只可在Android10的手机上执行
            values.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + "/" + PartStaticFinalUtil.DEFAULT_PATH);
            return values;
        }
    }

    public Uri getExternalContentUri(String mimeType) {
        if (mimeType.contains("image/")) {
            return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        } else if (mimeType.contains("video/")) {
            return MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        } else if (mimeType.contains("audio/")) {
            return MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        } else {
            return MediaStore.Downloads.EXTERNAL_CONTENT_URI;
        }
    }

    public void update() {
        resolver.update(insertUri, values, null, null);
    }
}